package dynamicproxy
import java.lang.reflect.InvocationHandler
import java.lang.reflect.Method
import java.lang.reflect.Proxy

class IGirlPoxy(target: Any) : InvocationHandler {

    private val mTarget = target

    override fun invoke(proxy: Any?, method: Method?, args: Array<out Any>?): Any? {
        //*---星投影:1.可用在变量声明的位置  2.可用来描述一个未知的类型
        //传进来的args类型是不确定的 所以invoke第二个参数传*args.orEmpty()
        return if ("watchMovies" == method?.name) {
            method.invoke(mTarget, *args.orEmpty())
        } else {
            null
        }
    }

    fun getProxyInstance() : Any? {
        return Proxy.newProxyInstance(mTarget.javaClass.classLoader, mTarget.javaClass.interfaces, this)
    }

}